热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

检测器|视界_极智Paper|目标检测神器YOLOX

篇首语:本文由编程笔记#小编为大家整理,主要介绍了极智Paper|目标检测神器YOLOX相关的知识,希望对你有一定的参考价值。 欢迎关注我的公众号[

篇首语:本文由编程笔记#小编为大家整理,主要介绍了极智Paper | 目标检测神器 YOLOX相关的知识,希望对你有一定的参考价值。


欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

  大家好,我是极智视界,本文解读一下 目标检测神器 YOLOX

  在文本中,作者介绍了 YOLO 系列的一些经验改进,形成了一个新的高性能检测器 - YOLOX。作者将 YOLO 检测器切换为 anchor-free 的方式,并结合其他先进的检测技术:一个解耦头 和 leading label分配策略 SimOTA,以实现 state-of-the-art 的结果:对于只有 0.91M 参数和 1.08G FLOPs 的 YOLO-Nano,在 COCO 上获得了 25.3% 的 AP,超过了 NanoDet 1.8% 的 AP;YOLOv3 是工业中使用最广泛的检测器之一,作者在 COCO 上将其精度提高到 47.3%,比目前的最佳实践高出 3.0%;对于与 YOLOv4-CSP、YOLOv5-L 参数大致相同的 YOLOX-L,作者在 Tesla V100 上以 FPS 68.9 的速度在 COCO 上实现了 50.0% 的 AP,这比 YOLOv5-L 高出 1.8%。此外作者使用一个 single YOLO-L 模型赢得了 Streaming Perception Challenge 比赛的第一名 (CVPR 2021年自动驾驶研讨会)。作者希望论文可以为开发人员和研究人员在实际场景中提供有用的经验,同时作者也提供了支持 ONNX、TensorRT、NCNN 和 Openvino 的部署版本。源码在:https://github.com/Megvii-BaseDetection/YOLOX


文章目录


    • 1. 简介
    • 2. 方法
      • 2.1 YOLOX-DarkNet53
      • 2.2 Other Backbones

    • 3. 实验
    • 4. 参考



1. 简介

  随着目标检测的发展,YOLO系列一直在追求实时应用中速度精度的最佳权衡,他们 (指 YOLO系列) 提取了当时最先进的检测技术 (YOLOv2 中的 anchors,YOLOv3 中的 残差网络),并优化实现以获得最佳实践。目前,YOLOv5 在 COCO 上以 AP 48.2% 和 13.7ms 的速度保持最佳折中性能。

  然而,在过去两年中,目标检测学术界的主要进展集中在 anchor-free 的检测器、高级标签分配策略 和 end-to-end (NMS-free) 的检测器。这些还没有被集成到 YOLO 家族中,因为 YOLOv4 和 YOLOv5 仍然是基于手工制作训练分配规则的 anchor-based 的检测器。

  这也是作者为什么写这篇报告的原因,作者想通过经验丰富的优化,将这些最新的进展交付给 YOLO 系列。考虑到 YOLOv4 和 YOLOv5 对于 anchor-based pipeline 可能有些过度优化,作者选择 YOLOv3 作为起始点 (将 YOLOv3-SPP 看做默认 YOLOv3)。事实上,由于计算资源有限以及在各种实际应用中也没有足够的软件支持,YOLOv3 仍然是业界应用最广泛的检测器之一。

  如下图,通过上述技术的经验更新,作者将在 COCO 上 640x640 分辨率时,将 YOLOv3 提升到了 AP 47.3%,大大超过了目前最好的 YOLOv3 实现 (44.3% AP)。另外,当切换到先进的 YOLOv5 架构,采用先进的 CSPNet backbone 和 额外的 PAN head,YOLOX-L 在 COCO 上以 640x640 的分辨率实现了 50.0% 的 AP,这比对应的 YOLOv5-L 高出 1.8%。作者也将他们的设计策略应用于更加小尺寸的模型上。YOLOX-Tiny 和 YOLOX-Nano (只有0.91M参数 和 1.08G FLOPs) 分别比对应的 YOLOv4-Tiny 和 NanoDet 性能好 (AP值) 10% 和 1.8%。




2. 方法


2.1 YOLOX-DarkNet53

  作者选择了 YOLOv3 和 Darknet53 作为 baseline。接下来将逐步介绍 YOLOX 的整个系统设计。

Implementation details 从 baseline 到最终的模型,作者的训练设置基本一致。在 COCO train2017 上对模型进行了总共 5个 epoch 的 warm-up 及 300 个 epoch,使用随机梯度下降 (SGD) 进行训练,使用 lr x batchsize/64 (线性缩放) 的学习率、initial lr 为 0.01 以及 cosine lr 调度。weight decay 为 0.0005、SGD momentum 为 0.9。对于 8-GPU 的设备,batch size 设置为 128,对于 单卡GPU,其他 batch size 依旧能够 work 地非常好。输入大小以 32 的步长,均匀地从 448 变化到 832。论文里的 FPS 和 延时 均是在 FP16精度、batch=1 的情况下在 单卡 Tesla V100 上测得的。

YOLOv3 baseline 作者设计的 baseline 参考了一些论文中的 YOLOv3-SPP,采用 Darknet53 backbone 和一个 SPP 层。与原始实践相比,作者略微改变了一些训练策略,增加了 EMA 权重更新、cosine lr 调度、IoU损失和 IoU感知分支。使用 BCE loss 来训练 cls 和 obj 分支,使用 IoU loss 来训练 reg 分支。此外,只进行 RandomHorizontalFlip、ColorJitter 和 多尺度数据增强,而放弃 RandomResizedCrop 策略,因为 RandomResizedCrop 与 规划的mosaic数据增强 有一些重叠。通过这些数据增强方法,baseline 在 COCO 验证集上达到了 38.5% 的 AP,如下表:

Decoupled head 在目标检测中,分类任务和回归任务之间的冲突是一个众所周知的问题。因此,用于分类和定位的解耦头被广泛应用于大多数 one-stage 和 two-stage 检测器中。然而,虽然 YOLO 系列的 backbone 和 特征金字塔 在不断演化,它们的检测头仍然是耦合的,如下图所示:

  作者的两个分析实验表明,耦合的检测头可能会损害性能。(1) 如下图,将 YOLO 的头部替换为解耦头,可以大大提高收敛速度; (2) 解耦头对于端到端版本的 YOLO 至关重要,end-to-end YOLO 耦合头的 AP 降低了 4.2%,而 end-to-end YOLO 解耦头的 AP 只下降了 0.8%。作者将 YOLO 检测头替换为上图的简化解耦头。具体来说,它包含了一个 1x1 conv层以降低通道维度,其次是两个并行的分支,分别有两个 3x3 conv层。

Strong data augmentation 将 Mosaic 和 MixUp 加入到数据增强策略中,以提高 YOLOX 的性能。Mosaic 是 ultralytics-YOLOv3 提出的一种高效的数据增强策略,随后被广泛应用于 YOLOv4、YOLOv5 等检测器中。MixUp 最初用于图像分类任务,后来在 BoF 中进行了修改,用于目标检测训练。在 YOLOv7 中采用 MixUp 和 Mosaic 来实现,并在最后 15 个 epoch 关闭它,这样做实现了 42.0% 的 AP。在使用数据增加后,作者发现 ImageNet 的预训练并没有更多的好处,因此所有的模型都从零开始训练。

Anchor-free YOLOv4 和 YOLOv5 都遵循 YOLOv3 最初的 anchor-based pipeline。然而,anchor 机制存在许多已知的问题。首先,为了达到最优的检测性能,需要在训练前进行聚类分析以确定一组最优的 anchors。这些聚类生成的 anchors 是特定于领域的,不太通用。其次,anchor 机制增加了检测头的复杂性,增加了每张图片的预测次数。在一些边缘 AI 系统中,在设备之间传输如此大量的预测 (如 从 NPU 到 CPU) 可能会成为整体延迟方面的潜在瓶颈。

  Anchor-free 检测器在过去两年中发展迅速,这些工作表明,anchor-free 检测器的性能可以与 anchor-based 的检测器相媲美。anchor-free 机制大大减少了需要启发式优化的设计参数的数量 和 许多涉及到良好性能的技巧,使检测器的训练和解码阶段大大简化。

  将 YOLO 转换为 anchor-free 的方式非常简单,只需要将每个位置的预测从 3 减少到 1,直接预测 4 个值,即 grid 左上角的两个偏移量 以及 预测框的高度和宽度。作者将每个目标的中心位置指定为 正样本,并预先定义一个比例范围,以指定每个目标的 FPN 级别。这种修改减少了检测器的 参数 和 GFLOPs,速度更加快,且获得了更加好的性能:AP 42.9%。

Multi positives 为了与 YOLOv3 的赋值规则保持一致,以上的 anchor-free 版本对每个目标只选择一个正样本 (中心位置),同时忽略了其他高质量的预测。 然而,优化这些高质量的预测也可能带来有益的梯度,这可能会缓解训练中 正/负抽样 极端不平衡的问题。作者简单地指定中心 3x3 区域为正样本,在 FCOS 中也称为 “中心抽样”。

SimOTA 高级标签分配是近年来目标检测的又一重要进展。基于作者自己的研究,总结了四个高级标签分配的关键见解:(1) loss / quality aware;(2) center prior;(3) 每个 ground-truth 的正 anchor 的动态数量 (缩写为 dynamic top-k);(4) global view。OTA 满足上述 4 条规则,因此选择它作为候选标签分配策略。

  具体来说,OTA 从全局的角度分析标签分配,将分配过程制定为一个最优传输问题 (OT),产生了目前分配策略中的 SOTA 性能。然而,在实践中作者发现使用 Sinkhorn-Knopp 算法求解 OT 问题会增加 25% 的训练时间,这对于 300 个 epoch 的训练来说是相当昂贵的。因此,作者将其简化为动态 top-k 策略,命名为 SimOTA,以得到近似解。

  简单介绍一下 SimOTA,SimOTA 首先计算 成对匹配程度,用每个 prediction-gt对 的成本或质量表示。例如,在 SimOTA 中,gt gi 与 预测pj 之间的代价计算为:

  SimOTA 不仅减少了 Sinkhorn-Knopp 算法的训练时间,而且避免了额外的解算器超参数。使用 SimOTA 将检测器的 AP 从 45.0% 提高到 47.3%,比 SOTA ultralytics-YOLOv3 还提高了 3.0%,这显示了高级分配策略的威力。

End-to-end YOLO 作者遵循添加两个额外的 conv 层,一对一的标签分配,并停止梯度。这使得检测器能够执行 end-to-end 方式,但略微降低了性能和推理速度。


2.2 Other Backbones

  除了 DarkNet53 外,作者还在其他不同大小的 backbone 上测试 YOLOX,其中 YOLOX 所有对应部分实现了一致的改进。

Modified CSPNet in YOLOv5 为了进行公平的比较,作者采用了原生的 YOLOv5 的 backbone,包括修改的 CSPNet、SiLU 激活 以及 PAN头,并遵循它的缩放规则去生成 YOLOX-S、YOLOX-M、YOLOX-L 和 YOLOX-X 模型。与下表中的 YOLOv5 相比,本文的模型获得了 ~3.0% 到 ~1.0% AP 的提升,同时只增加一点点时间 (来自 解耦头)。

Tiny and Nano detectors 作者进一步缩小模型为 YOLOX-Tiny,以便与 YOLOv4-Tiny 进行比较。对于移动设备,采用深度卷积的方法构建了一个只有 0.91M参数 和 1.08G FLOPs 的 YOLOX-Nano 模型。如下表所示,YOLOX 在模型尺寸更小的情况下也比同类模型表现更加好。

Model size and data augmentation 在实验中,所有的模型都保持了几乎相同的 学习调度策略 和 优化参数。然而,作者发现合适的增强策略 在不同规模的模型中有所不同。如下表所示,对于 YOLOX-L,应用 MixUp 可以提高 0.9% 的 AP,但对于 YOLOX-Nano 这样的小模型,数据增强的效果却是减弱的。这样的改进使 YOLOX-Nano 的 AP 从 24.0% 提高到 25.3%。

  对于大模型,作者还发现数据增强效果更加有帮助。事实上,作者的 MixUp 实现比原版的更重。受到 Copypaste 的启发,在混合它们之前,通过随机抽样的比例因子对两个图像进行抖动。为了了解 MixUp 和 缩放抖动的能力,作者将其与 YOLOX-L 上的 Copypaste 进行比较。需要注意的是,Copypaste 需要额外的实例掩码注释,而 MixUp 则不需要。如上表,这两种方法的性能不相上下,这表明当没有 实例掩码注释 可用时,带缩放抖动的 MixUp 是对 Copypaste 的合格替代。




3. 实验

  在 COCO 2017 测试集上对不同目标检测器的速度和精度进行了比较:




4. 参考

  [1] YOLOX: Exceeding YOLO Series in 2021.



  好了,以上解读了 目标检测神器 YOLOX。希望我的分享能对你的学习有一点帮助。



 【极智视界】

《极智Paper | 目标检测神器 YOLOX》




搜索关注我的微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !


推荐阅读
  • Android图形架构学习笔记(待修改)
    以下简单总结来自Android官网,稍作总结:https:source.android.google.cndevicesgraphics概览Andr ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 程序分析与优化9附录XLA的缓冲区指派
    本章是系列文章的案例学习,不属于正篇,主要介绍了TensorFlow引入的XLA的优化算法。XLA也有很多局限性,XLA更多的是进行合并,但有时候如果参数特别多的场景下,也需要进行 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
author-avatar
勇_哥6868
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有